/*
 * Copyright (C), 2002-2016, 苏宁易购电子商务有限公司
 * FileName: ModelCheckDaoServiceImpl.java
 * Author:   13075787
 * Date:     2016年7月1日 上午11:23:01
 * Description: //模块目的、功能描述      
 * History: //修改记录
 * <author>      <time>      <version>    <desc>
 * 修改人姓名             修改时间            版本号                  描述
 */
package com.suning.sawp.service.impl.model;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import com.suning.framework.dal.client.DalClient;
import com.suning.sawp.intf.model.ModelCheckListBean;
import com.suning.sawp.intf.model.ModelCheckVo;
import com.suning.sawp.intf.model.ModelConstant;
import com.suning.sawp.intf.model.ModelTaskAssignDetailsBean;
import com.suning.sawp.service.util.BeanUtil;

/**
 * 样机管理DAO<br>
 * 盘点相关数据库操作
 * 
 * @author 13075787
 * @see [相关类/方法]（可选）
 * @since [产品/模块版本] （可选）
 */
@Service("modelCheckDaoService")
public class ModelCheckDaoServiceImpl {

    private static final int NUM_ZERO = 0;
    /**
     * 最大每页分页数
     */
    private static final int MAX_SIZE = 20;

    @Resource
    DalClient dalClient;

    /**
     * 功能描述: <br>
     * 为员工查询出盘点中的样机盘点数据列表-分页
     *
     * @param taskId
     * @param checkStaffId
     * @param index
     * @param size
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public List<ModelCheckVo> queryModelCheckListForStaff(Long taskId, String checkStaffId, Integer index,
            Integer size) {
        List<ModelCheckVo> result = null;
        // 任务id与盘点人员工号不可为空
        if (null != taskId && StringUtils.isNotBlank(checkStaffId)) {
            Integer locIndex = null == index || index.intValue() < NUM_ZERO ? NUM_ZERO : index;
            Integer locSize = null == size || size.intValue() > MAX_SIZE ? MAX_SIZE : size;
            Map<String, Object> paramMap = new HashMap<String, Object>();
            // 分页参数
            paramMap.put("startIndex", locIndex);
            paramMap.put("maxCount", locSize);
            // 盘点中，未提交
            paramMap.put("status", ModelConstant.CHECK_TASK_STATUS_NO);
            paramMap.put("taskId", taskId);
            paramMap.put("checkStaff", checkStaffId);
            result = dalClient.queryForList("MODEL_CHECK_LIST.SELECT_MODEL_CHECK_ING_LIST", paramMap,
                    ModelCheckVo.class);
        }
        return result;
    }

    /**
     * 功能描述: <br>
     * 更新盘点商品的盘点数量
     *
     * @param taskId
     * @param checkStaffId
     * @param commCode
     * @param commNum actualCommCode 更新的数据
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    private boolean updateCheckComm(Long taskId, String checkStaffId, String commCode, Integer commNum,
            String actualCommCode, boolean updateTimeFlag) {
        boolean result = false;
        if (null != taskId && StringUtils.isNotBlank(checkStaffId) && StringUtils.isNotBlank(commCode)) {
            Map<String, Object> paramMap = new HashMap<String, Object>();
            paramMap.put("checkCommNum", commNum);
            paramMap.put("actualCommCode", actualCommCode);
            // 更新条件
            paramMap.put("conditon_taskId", taskId);
            paramMap.put("conditon_commCode", commCode);
            paramMap.put("conditon_checkStaff", checkStaffId);
            // 是否更新盘点时间
            if (updateTimeFlag) {
                paramMap.put("updateTimeFlag", updateTimeFlag);
            }
            int num = dalClient.execute("MODEL_CHECK_LIST.UPDATE_MODEL_CHECK_NUM", paramMap);
            result = num > NUM_ZERO ? true : false;
        }
        return result;
    }

    /**
     * 功能描述: <br>
     * 更新盘点商品数量
     *
     * @param taskId
     * @param checkStaffId
     * @param commCode
     * @param commNum
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public boolean updateCheckCommNum(Long taskId, String checkStaffId, String commCode, Integer commNum,
            boolean updateTimeFlag) {
        boolean result = false;
        if (null != commNum) {
            result = this.updateCheckComm(taskId, checkStaffId, commCode, commNum, null, updateTimeFlag);
        }
        return result;
    }

    /**
     * 功能描述: <br>
     * 更新盘点商品真实出样编码
     *
     * @param taskId
     * @param checkStaffId
     * @param commCode
     * @param actualCommCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public boolean updateCheckActualCommCode(Long taskId, String checkStaffId, String commCode, String actualCommCode) {
        boolean result = false;
        if (StringUtils.isNotBlank(actualCommCode)) {
            result = this.updateCheckComm(taskId, checkStaffId, commCode, null, actualCommCode, false);
        }
        return result;
    }

    /**
     * 功能描述: <br>
     * 查询某个已盘点商品的数据
     *
     * @param taskId
     * @param checkStaffId
     * @param commCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public ModelCheckListBean queryModelCheckComm(Long taskId, String checkStaffId, String commCode) {
        ModelCheckListBean result = null;
        if (null != taskId && StringUtils.isNotBlank(checkStaffId) && StringUtils.isNotBlank(commCode)) {
            Map<String, Object> paramMap = new HashMap<String, Object>();
            // 查询条件
            paramMap.put("taskId", taskId);
            paramMap.put("commCode", commCode);
            paramMap.put("checkStaff", checkStaffId);
            result = dalClient.queryForObject("MODEL_CHECK_LIST.SELECT_BY_KEY", paramMap, ModelCheckListBean.class);
        }
        return result;
    }

    /**
     * 功能描述: <br>
     * 插入盘点数据
     *
     * @param modelCheck
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public boolean upsertModelCheck(ModelCheckListBean modelCheck) {
        boolean result = true;
        if (null != modelCheck && null != modelCheck.getTaskId() && StringUtils.isNotBlank(modelCheck.getCheckStaff())
                && StringUtils.isNotBlank(modelCheck.getStoreCode())) {
            Map<String, Object> paramMap = BeanUtil.describe(modelCheck);
            dalClient.execute("MODEL_CHECK_LIST.UPDATE_MODEL_CHECK", paramMap);
        } else {
            result = true;
        }
        return result;
    }

    /**
     * 功能描述: <br>
     * 删除某条盘点记录
     *
     * @param taskId
     * @param checkStaffId
     * @param commCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public boolean deleteModelCheck(Long taskId, String checkStaffId, String commCode) {
        boolean result = true;
        if (null != taskId && StringUtils.isNotBlank(checkStaffId) && StringUtils.isNotBlank(commCode)) {
            Map<String, Object> paramMap = new HashMap<String, Object>();
            paramMap.put("taskId", taskId);
            paramMap.put("commCode", commCode);
            paramMap.put("checkStaff", checkStaffId);
            // 盘点状态-盘点中
            paramMap.put("status", ModelConstant.CHECK_TASK_STATUS_NO);
            dalClient.execute("MODEL_CHECK_LIST.DELETE_BY_FIELDS", paramMap);
        } else {
            result = true;
        }
        return result;
    }

    /**
     * 查询分配的任务
     * 功能描述: <br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @param staffId
     * @param taskId
     * @param cateCode
     * @param brandCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public ModelTaskAssignDetailsBean getInventoryTask(String storeCode, String staffId, Long taskId, String cateCode, String brandCode) {
        Map<String, Object> paramMap = new HashMap<String, Object>();
        // 查询条件
        paramMap.put("taskId", taskId);
        paramMap.put("storeCode", storeCode);
        paramMap.put("staffId", staffId);
        paramMap.put("cateCode", cateCode);
        paramMap.put("brandCode", brandCode);
        return dalClient.queryForObject("MODEL_CHECK_LIST.GET_INVENTORY_TASK_BY_KEY", paramMap, ModelTaskAssignDetailsBean.class);
    }
}
